26878a3b519b63bf49d745c922e4f1ff3ce50934,jsprit-core/src/main/java/com/graphhopper/jsprit/core/problem/constraint/MaxDistanceConstraint.java,MaxDistanceConstraint,fulfilled,#JobInsertionContext#TourActivity#TourActivity#TourActivity#number#,70

Before Change



            double distanceBeforePickup2AfterPickup;
            if(associatedPickAndDeliveryAreDirectNeighbors){
                distanceBeforePickup2AfterPickup = distanceCalculator.getDistance(actBeforePickup.getLocation(), actAfterPickup.getLocation(), actBeforePickup.getEndTime(), iFacts.getNewVehicle());
            }
            else{
                distanceBeforePickup2AfterPickup = distanceCalculator.getDistance(actBeforePickup.getLocation(), actAfterPickup.getLocation(), actBeforePickup.getEndTime(), iFacts.getRoute().getVehicle());

After Change


            currentDistance = stateManager.getRouteState(iFacts.getRoute(),iFacts.getNewVehicle(), distanceId,Double.class);
        }
        double maxDistance = getMaxDistance(iFacts.getNewVehicle());
        if(currentDistance > maxDistance) return ConstraintsStatus.NOT_FULFILLED_BREAK;

        double distancePrevAct2NewAct = distanceCalculator.getDistance(prevAct.getLocation(), newAct.getLocation(), iFacts.getNewDepTime(), iFacts.getNewVehicle());
        double distanceNewAct2nextAct = distanceCalculator.getDistance(newAct.getLocation(), nextAct.getLocation(), iFacts.getNewDepTime(), iFacts.getNewVehicle());
        double distancePrevAct2NextAct = distanceCalculator.getDistance(prevAct.getLocation(), nextAct.getLocation(), prevActDepTime, iFacts.getNewVehicle());
        if(nextAct instanceof End && !iFacts.getNewVehicle().isReturnToDepot()){
            distanceNewAct2nextAct = 0;
            distancePrevAct2NextAct = 0;
        }
        double additionalDistance = distancePrevAct2NewAct + distanceNewAct2nextAct - distancePrevAct2NextAct;
        if(currentDistance + additionalDistance > maxDistance) return ConstraintsStatus.NOT_FULFILLED;


        double additionalDistanceOfPickup = 0;
        if(newAct instanceof DeliverShipment){
            int iIndexOfPickup = iFacts.getRelatedActivityContext().getInsertionIndex();
            TourActivity pickup = iFacts.getAssociatedActivities().get(0);
            TourActivity actBeforePickup;
            if(iIndexOfPickup > 0) actBeforePickup = iFacts.getRoute().getActivities().get(iIndexOfPickup-1);
            else actBeforePickup = new Start(iFacts.getNewVehicle().getStartLocation(),0,Double.MAX_VALUE);
            TourActivity actAfterPickup = iFacts.getRoute().getActivities().get(iIndexOfPickup);
            double distanceActBeforePickup2Pickup = distanceCalculator.getDistance(actBeforePickup.getLocation(), pickup.getLocation(), actBeforePickup.getEndTime(), iFacts.getNewVehicle());
            double distancePickup2ActAfterPickup = distanceCalculator.getDistance(pickup.getLocation(), actAfterPickup.getLocation(), iFacts.getRelatedActivityContext().getEndTime(), iFacts.getNewVehicle());
            double distanceBeforePickup2AfterPickup = distanceCalculator.getDistance(actBeforePickup.getLocation(), actAfterPickup.getLocation(), actBeforePickup.getEndTime(), iFacts.getNewVehicle());
            additionalDistanceOfPickup = distanceActBeforePickup2Pickup  + distancePickup2ActAfterPickup - distanceBeforePickup2AfterPickup;
        }